package com.philips.work.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.philips.work.mapper.YwAccountMapper;
import com.philips.work.domain.YwAccount;
import com.philips.work.service.IYwAccountService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 账户管理Service业务层处理
 * 
 * @author philips
 * @date 2025-05-19
 */
@Service
public class YwAccountServiceImpl implements IYwAccountService 
{
    @Autowired
    private YwAccountMapper ywAccountMapper;

    /**
     * 查询账户管理
     * 
     * @param ids 账户管理主键
     * @return 账户管理
     */
    @Override
    public YwAccount selectYwAccountByIds(String ids)
    {
        return ywAccountMapper.selectYwAccountByIds(ids);
    }

    /**
     * 查询账户管理列表
     * 
     * @param ywAccount 账户管理
     * @return 账户管理
     */
    @Override
    public List<YwAccount> selectYwAccountList(YwAccount ywAccount)
    {
        return ywAccountMapper.selectYwAccountList(ywAccount);
    }

    /**
     * 查询所有账户列表
     *
     * @return 账户列表
     */
    @Override
    public List<YwAccount> findAllAccountList() {
        YwAccount ywAccount = new YwAccount();
        return ywAccountMapper.selectYwAccountList(ywAccount);
    }

    /**
     * 新增账户管理
     * 
     * @param ywAccount 账户管理
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int insertYwAccount(YwAccount ywAccount)
    {
        if (existData(ywAccount)) {
            throw new RuntimeException("账户信息重复");
        }
        return ywAccountMapper.insertYwAccount(ywAccount);
    }

    /**
     * 修改账户管理
     * 
     * @param ywAccount 账户管理
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int updateYwAccount(YwAccount ywAccount)
    {
        if (existData(ywAccount)) {
            throw new RuntimeException("账户信息重复");
        }
        ywAccount.setUpTime(new Date());
        return ywAccountMapper.updateYwAccount(ywAccount);
    }

    /**
     * 公用方法：验证写入的账户信息是否已经存在
     * @param ywAccount
     * @return
     */
    private boolean existData(YwAccount ywAccount) {
        YwAccount po = new YwAccount();
        po.setAccountName(ywAccount.getAccountName());
        List<YwAccount> list = ywAccountMapper.selectYwAccountList(po);
        // 默认没有非本数据记录中没有相同名称
        boolean flag = false;
        if(ywAccount.getIds()!=null){
            // 更新操作
            if(list != null && !list.isEmpty()){
                for (YwAccount po2 : list) {
                    // 非本数据记录中有相同名称
                    if (!po2.getIds().equals(ywAccount.getIds())) {
                        flag = true;
                        break;
                    }
                }
            }
        }else {
            // 新增操作
            if(list != null && !list.isEmpty()){
                flag = true;
            }
        }
        return flag;
    }

    /**
     * 批量删除账户管理
     * 
     * @param idss 需要删除的账户管理主键
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deleteYwAccountByIdss(String[] idss)
    {
        return ywAccountMapper.deleteYwAccountByIdss(idss);
    }

    /**
     * 删除账户管理信息
     * 
     * @param ids 账户管理主键
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deleteYwAccountByIds(String ids)
    {
        return ywAccountMapper.deleteYwAccountByIds(ids);
    }
}
